/**
 * 子模块桥接(新版)
 * 接收方需要使用$on注册事件
 * 调用放需要使用$emit触发事件
 */
import Vue from 'vue'
import { isArray, isString, isNumber, isObject } from 'util';
import _ from 'lodash';

const vm = new Vue({
  el:'#dealerFormChange',
	methods: {

		/**
		 * 更改表单配置（单个）
		 * @param {*} block 表单配置（单个）
		 * @param {*} tmpKey 配置中的其他rules后缀（字符，默认‘Tmp’）
		 * @param {*} isDisabled 是启用还是禁用（true:启用，false:禁用）
		 * @param {*} wipeData 是否在切换时清空值（true:启用，false:禁用）
		 */
		changeFormBlock(block, tmpKey = 'Tmp', isDisabled = false, wipeData = false){
			// if(block.fieldName === 'saleLevel' || block.fieldName === 'stationNum'){
				// debugger;
			// }
			//如果不存在该配置，如果值为false，则不变更(只有值为true时不执行)
			if(!block.noChangeDisabled){
				block.disabled = isDisabled;
			}
			//是否清空其值
			if(wipeData){
				if(!block.noWipeData){
					//根据不同类型赋予不同的值
					if(block.initialValue == undefined || block.initialValue == null){
						//如果是空，不处理
					}else if(isArray(block.initialValue)){
						block.initialValue = [];
					}else if(isObject(block.initialValue)){
						block.initialValue = {};
					}else if(isString(block.initialValue)){
						block.initialValue = '';
					}else if(isNumber(block.initialValue)){
						block.initialValue = undefined;
					}
				}
			}
			if(!block.noChangeRules){
				//如果按rules + tmpKey没有取到则不做处理
				if(isArray(block[`rules${tmpKey}`])){
					block.rules = block[`rules${tmpKey}`];
				}else if(isObject(block[`rules${tmpKey}`])){
					//如果是特殊配置，对象类型
					let config = block[`rules${tmpKey}`];
					this.clearStatus(block);
					if(!!config.hidden){
						block.hidden = true;
						//清除验证
						block.rules = [];
					}else if(!!config.disabled){
						block.disabled = true;
						//清除验证
						block.rules = [];
					}else if(!!config.readonly){
						block.readonly = true;
						//清除验证
						block.rules = [];
					}
				}else if(isString(block[`rules${tmpKey}`])){
					let type = block[`rules${tmpKey}`];
					this.clearStatus(block);
					if(type === 'hidden'){
						block.hidden = true;
						//清除验证
						block.rules = [];
					}else if(type === 'disabled'){
						block.disabled = true;
						//清除验证
						block.rules = [];
					}else if(type === 'readonly'){
						block.readonly = true;
						//清除验证
						block.rules = [];
					}
				}
			}
		},

		clearStatus(block){
			block.hidden = false;
			block.disabled = false;
			block.readonly = false;
		},

		/**
		 * 清除已经存在的验证结果
		 * @param {*} formPanel formPanel的vue对象
		 */
		clearValidate(formPanel){
			if(formPanel){
				formPanel.$refs.form.clearValidate();
			}
		},

		/**
		 * 修改表单全部配置
		 * @param {*} initForm 需要变更的表单
		 * @param {*} tmpKey 配置中的其他rules后缀（字符，默认‘Tmp’）
		 * @param {*} isDisabled 是启用还是禁用（true:启用，false:禁用）
		 * @param {*} wipeData 是否在切换时清空值（true:启用，false:禁用）
		 */
		changeForm(initForm, tmpKey, isDisabled, wipeData){
			for(let i = 0 ; i < initForm.length; i++){
				this.changeFormBlock(initForm[i],tmpKey,isDisabled,wipeData);
			}
		},
	}
});
export default vm;
